LN technical details
Details of how LN chennel is implemented. Such as architecture of commitment transaction.
LN のメッセージの形式
type は奇数
取引の流れ
チャネルをつくって state を update する。これはかんたん
どうやって前の state を無効にするか
すべての to_self output はタイムロック OR remote が revocation key ですぐに unlock できる。
relay するにはどうするか
HTLC を連鎖させる
HTLC なしで commitment tx の更新を考える
commitment tx は 2of2 multisig の funding tx を unlock するため双方の署名が必要
相手側の commitment tx をつくって署名して、署名だけわたすのかな?
commitment tx は非対称なのことに注意
署名を渡すコマンドが commitment_signed
前の commitment tx の再利用を防ぐために、revocation key を生成できるシークレットを渡す
これが revoke_and_ack
送金
Alice --> Bob --> Carol と送金する
Channel の状態を変化させるためには update_add_htlc がまず用いられる
update_add_htlc は、相手の commitment tx に HTLC の追加を依頼するコマンドと言える
Alice が Bob に投げる
update_add_htlc により新しい commitment tx が定義されるが、まだ署名は渡っていない。署名は 前述の commitment_signedで渡される
つまり、update_add_htlc と commitment_signed はセット。update_add_htlc は複数でも良いが、対応する 署名が必要。
Alice が Bob になげる
Bob は Carol に update_add_htlc を投げる前に、alice の前の commitment tx を revoke しないといけない
Alice はすでに新しい commitment tx は知っているので、Bob から Alice に commitment_signed で署名を渡す
Alice から Bob に revoc_and_akc
ここまでいけば、Bob は Carol に対して同じことをする
送金はどのように行われるか
HTLC を追加
update_add_htlc は複数可能
流れ
update_add_htlc で送金リクエスト。
update_add_htlc の受けては、ローカルの commitment tx をその内容に従って作成し、署名する。commitment_signed で署名を送る?
update_add_htlc の送り手は、commitment_signed が正しければ、ローカルの commitment tx を更新する?そして revoke_and_ack を返す?
リレーを atomic に行うため
A - B - C と送金する場合(A が B を経由して C に送金したい)
B は C に渡したけど、A から受け取れない可能性がある
A は B に渡したけど、B が C に渡さない可能性がある
A は C しか知らない値(preimage)で、 B への送金をロックする(hash(preimage)が unlock には必要) + 取り戻す用の timelock
これが HTLC
B は自分は送ったのに、先に A に取り戻されると困る
そのため、B-C の HTLC の timelock は A-C の HTLC の timelock よりも短くないといけない
A-B timelock < B-C timelock だと、C が preimage を明かしたタイミング(つまり B-C の timelock よりも前)で、すでに A が取り戻せる可能性がある(こちらの方が timelock が開けるのが早いので)
C が preimage を明かしたあとに、B がそれを使って A-B の HTLC から資金を受け取れるのに十分な時間差が必要
まて
The reason for the separate transaction stage for HTLC outputs is so that HTLCs can timeout or be fulfilled even though they are within the to_self_delay delay. Otherwise, the required minimum timeout on HTLCs is lengthened by this delay, causing longer timeouts for HTLCs traversing the network.
Channel close